﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using Classes.Conec;
using Classes.Model.Entidade;
namespace Classes.Model.Dao
{
    public class ClassificacaoDAO
    {
         private const String SQL_INSERT = "INSERT INTO CLASSIFICACAO (DESCRICAO) VALUES (@DESCRICAO)";
        private const String SQL_UPDATE = "UPDATE CLASSIFICACAO SET DESCRICAO = @NOVA_DESCRICAO WHERE (ID_CLASSIFICACAO = @ID_NOVA)";
        private const String SQL_DELETE = "DELETE CLASSIFICACAO WHERE ID_CLASSIFICACAO = @ID";
        private const String SQL_SELECT_ID = "SELECT * FROM CLASSIFICACAO WHERE ID_CLASSIFICACAO = @ID";
        private const String SQL_SELECT = "SELECT ID_CLASSIFICACAO, DESCRICAO FROM CLASSIFICACAO";
        private static ClassificacaoDAO classificacao;

        public static ClassificacaoDAO getInstance()
        {
            if (classificacao == null)
            {
                classificacao = new ClassificacaoDAO();
            }
            return classificacao;
        }

        public String deletar(int id)
        {
            using (SqlConnection conn = Conectar.getConexao())
            {
                SqlCommand executar_comando = new SqlCommand(SQL_DELETE, conn);
                try
                {
                    conn.Open();
                    executar_comando.Parameters.AddWithValue("@ID", id);
                    executar_comando.ExecuteNonQuery();
                    return "Categoria deletada com sucesso !";
                }
                catch (Exception o)
                {
                    return "Erro ao excluir ! " + o.Message;
                }
            }
        }

        public String inserir(Entidade.ClassificacaoDTO classificacao)
        {
            using (SqlConnection conn = Conectar.getConexao())
            {
                SqlCommand executar_comando = new SqlCommand(SQL_INSERT, conn);
                try
                {
                    conn.Open();
                    executar_comando.Parameters.AddWithValue("@descricao", classificacao.Descricao);
                    executar_comando.ExecuteNonQuery();
                    return "Inclusão realizada com sucesso";
                }
                catch (Exception o)
                {
                    return "Erro na inclusão " + o.Message;
                }
            }
        }

        public String atualizar(Entidade.ClassificacaoDTO classificacao)
        {
            using (SqlConnection conn = Conectar.getConexao())
            {
                SqlCommand executar_comando = new SqlCommand(SQL_UPDATE, conn);
                try
                {
                    conn.Open();
                    executar_comando.Parameters.Add("@NOVA_DESCRICAO", System.Data.SqlDbType.VarChar, 100).Value = classificacao.Descricao;
                    executar_comando.Parameters.Add("@ID_NOVA", System.Data.SqlDbType.Int, 10).Value = classificacao.Id_classificacao;
                    executar_comando.ExecuteNonQuery();
                    return "Atualização realizada com sucesso";
                }
                catch (SqlException sq)
                {
                    return "Erro na atualização: " + sq.Message;
                }
                catch (Exception ex)
                {
                    return "Erro na atualização: " + ex.Message;
                }
            }
        }

        public List<Entidade.ClassificacaoDTO> select()
        {
            using (SqlConnection conn = Conectar.getConexao())
            {
                List<Entidade.ClassificacaoDTO> classificacao = new List<Entidade.ClassificacaoDTO>();
                try
                {
                    conn.Open();
                    SqlCommand executar_comando = new SqlCommand(SQL_SELECT, conn);
                    SqlDataReader reader = executar_comando.ExecuteReader();
                    while (reader.Read())
                    {
                        var nome = reader.GetValue(1);
                        var id = reader.GetValue(0);
                        Entidade.ClassificacaoDTO cla = new Entidade.ClassificacaoDTO(Convert.ToUInt16(id), Convert.ToString(nome));
                        classificacao.Add(cla);
                        cla = null;
                        //categorias.Add(new Entidade.CategoriaDTO(reader.GetInt16(1),reader.GetString(2)));
                    }
                    reader.Close();
                    return classificacao;
                }
                catch (Exception)
                {
                    return classificacao;
                }
            }
        }

        public ClassificacaoDTO select(int id_cla)
        {
            using (SqlConnection conn = Conectar.getConexao())
            {
                SqlCommand executar_comando = new SqlCommand(SQL_SELECT_ID, conn);
                ClassificacaoDTO cla = null;
                try
                {
                    conn.Open();
                    executar_comando.Parameters.Add("@ID", System.Data.SqlDbType.Int, 10).Value = id_cla;
                    SqlDataReader reader = executar_comando.ExecuteReader();
                    while (reader.Read())
                    {
                        var nome = reader.GetValue(1);
                        var id = reader.GetValue(0);
                        cla = new ClassificacaoDTO(Convert.ToUInt16(id), Convert.ToString(nome));
                    }
                    reader.Close();
                    return cla;
                }
                catch (Exception)
                {
                    return null;
                }
            }
        }
    }
}
